package controle;

import java.io.ByteArrayOutputStream;

import javax.faces.component.UIData;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import relatorio.Memorando;
import relatorio.Oficio;

import entidades.Documento;
import entidades.NotaFiscal;
import entidades.OrigemPagamento;

import util.SessionUtil;


public class RelatorioBean {
	
	private NotaFiscal notaFiscal = new NotaFiscal();
	private UIData objDataTableNotaFiscal;
	
	private OrigemPagamento origemPagamento = new OrigemPagamento();
	private UIData objDataTablePagamento;
	
	public String geraOficio(){
		try {
			
			origemPagamento = (OrigemPagamento) objDataTablePagamento.getRowData();
			notaFiscal = (NotaFiscal) objDataTableNotaFiscal.getRowData();
			
			Documento doc = new Documento();
			doc.setDs_assinatura("Rodrigo Moreira Dantas");
			doc.setDs_documento("Oficio");
			doc.setNr_documento(origemPagamento.getContratoAnalise().getCd_item() + "");
			doc.setTx_assunto_documento("Oficio");
			doc.setDs_tipo_documento("Oficio");
			
			DocumentoBean docBean = new DocumentoBean();
			docBean.setDocumento(doc);
			
			docBean.salvar();
						
			FacesContext faces = FacesContext.getCurrentInstance();
			HttpServletResponse response = (HttpServletResponse) faces.getExternalContext().getResponse();
			
			//Cabecalhos
			response.setHeader("Expires", "0");
			response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
			response.setHeader("Pragma", "public"); 
			response.setContentType( "application/pdf" );
			response.addHeader("Content-disposition", "attachment;filename=\"Oficio.pdf\"");
					
			Oficio oficio = new Oficio();
			oficio.setNota(notaFiscal);
			oficio.setPagamento(origemPagamento);
			
			ByteArrayOutputStream baos = oficio.geraPdf();
			response.setContentLength(baos.size());
	
			ServletOutputStream out = response.getOutputStream();
			baos.writeTo(out);
			baos.flush();
			faces.responseComplete();
			
		}catch(Exception e){
				
				SessionUtil.addErrorMessage("ErroPdf");
				return null;
				
		}
		
		return null;
	}
	
	public String geraMemorando() {
		try {
			
			notaFiscal = (NotaFiscal) objDataTableNotaFiscal.getRowData();
			
			Documento doc = new Documento();
			doc.setDs_assinatura("Rodrigo Moreira Dantas");
			doc.setDs_documento("Memorando");
			doc.setNr_documento(notaFiscal.getNr_nota_fiscal() + "/" +notaFiscal.getCd_coa());
			doc.setTx_assunto_documento("Memorando");
			doc.setDs_tipo_documento("Memorando");
			
			DocumentoBean docBean = new DocumentoBean();
			docBean.setDocumento(doc);
			
			docBean.salvar();
			
			
			FacesContext faces = FacesContext.getCurrentInstance();
			HttpServletResponse response = (HttpServletResponse) faces.getExternalContext().getResponse();
			
			//Cabecalhos
			response.setHeader("Expires", "0");
			response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
			response.setHeader("Pragma", "public"); 
			response.setContentType( "application/pdf" );
			response.addHeader("Content-disposition", "attachment;filename=\"Memorando.pdf\"");
					
			Memorando memo = new Memorando();
			memo.setNumeroDocumento(notaFiscal.getNr_nota_fiscal());
			ByteArrayOutputStream baos = memo.geraPdf();
			response.setContentLength(baos.size());
	
			ServletOutputStream out = response.getOutputStream();
			baos.writeTo(out);
			baos.flush();
			faces.responseComplete();
			
		}catch(Exception e){
				
				SessionUtil.addErrorMessage("ErroPdf");
				return null;
				
		}
		return null;
	}

	public NotaFiscal getNotaFiscal() {
		return notaFiscal;
	}

	public void setNotaFiscal(NotaFiscal notaFiscal) {
		this.notaFiscal = notaFiscal;
	}

	public UIData getObjDataTableNotaFiscal() {
		return objDataTableNotaFiscal;
	}

	public void setObjDataTableNotaFiscal(UIData objDataTableNotaFiscal) {
		this.objDataTableNotaFiscal = objDataTableNotaFiscal;
	}

	public OrigemPagamento getOrigemPagamento() {
		return origemPagamento;
	}

	public void setOrigemPagamento(OrigemPagamento origemPagamento) {
		this.origemPagamento = origemPagamento;
	}

	public UIData getObjDataTablePagamento() {
		return objDataTablePagamento;
	}

	public void setObjDataTablePagamento(UIData objDataTablePagamento) {
		this.objDataTablePagamento = objDataTablePagamento;
	}

}
